Terraformなら簡単に全AWSリソースに共通タグを設定できます
今回は TerraformのAWS Providerの便利機能default tagsをご紹介します。
やりたいこと
一連のリソースに同じタグを付けてタグでリソース管理をしたい時、あると思います。よくあるのが同一アカウント内に複数環境(開発/テスト/本番など)のリソースを作成するとき。また、コスト配分タグという機能を使えば、タグごとにコストをグルーピングすることができ、こちらも非常に便利です。タグの活用パターンについては以下にまとまっていますのでご確認いただければと思います。
ただ、どうやって各リソースに同じタグを設定すれば良いでしょうか。各リソースを作成時に都度都度タグの定義をしていては、抜け漏れとかタイポが発生しそうですよね。
そこでdefault tags
この機能を使えば、各リソースに散らばってしまうタグ付与の設定を一元化することができます。TerraformのAWS Providerの引数の1つで、ここでタグの設定をすると、そのproviderを使ってプロビジョニングする全AWSリソースにそのタグが付与されます。便利!
- ※ もちろん、タグが付与できるリソースのみに限ります。
- ※ aws_autoscaling_groupも対象外だそうです。
やってみた
provider "aws" { region = "ap-northeast-1" default_tags { tags = { env = "dev" } } }
こんな感じで、AWS Providerブロック内にdefault_tags.tags
ブロックを作成します。今回はプロビジョニングするリソースとして、VPC関連の一連のリソース(サブネット、NACL、ルートテーブル…)を設定しています。
以下、terraform plan
例です。
tag
とtags_all
がありますね。tag
にはそのリソースで設定されたタグ、tags_all
にはそのリソースで設定されたタグに加えてdefault_tags
で設定されたタグが表示されます。
terraform apply
実施後、リソースを確認してみましょう。
こんな感じで、プロビジョニングしたリソースに軒並みenv = dev
タグを設定できました。
リソースのタグとタグ名が被ったら?
provider "aws" { region = "ap-northeast-1" default_tags { tags = { env = "dev" } } } resource "aws_eip" "tagtest" { vpc = true tags = { env = "override" } }
上記のようにdefault_tags
とリソースのtags
でタグ名が被ってしまった場合は…
リソースの設定が勝ります。まぁでも上書かないで済むような設計にしたほうがわかりやすいかと思います。